#!/bin/bash

# 日志函数
log_info() {
    echo " [INFO] $1 "
}

log_success() {
    echo " [SUCCESS] $1 "
}

log_error() {
    echo " [ERROR] $1 "
}

# Check if version parameter is provided
if [ $# -eq 0 ]; then
    log_error "版本参数是必需的"
    echo "用法: $0 <version> [--force-build]"
    echo "示例: $0 v1.1.5"
    echo "强制构建: $0 v1.1.5 --force-build"
    exit 1
fi

VERSION=$1
FORCE_BUILD=false

# 检查是否强制构建
if [ "$2" = "--force-build" ]; then
    FORCE_BUILD=true
    log_info "强制重新构建前端项目"
else
    log_info "默认跳过前端构建，使用现有 dist 目录"
fi

IMAGE_NAME="buding-ai-web"
REGISTRY="crpi-5fhtvlj50ip555mt.cn-guangzhou.personal.cr.aliyuncs.com/docker-hubes"

log_info "开始构建前端版本: $VERSION"

# 切换到前端目录
FRONT_DIR="$(dirname "$0")/../front"
cd "$FRONT_DIR"

log_info "当前工作目录: $(pwd)"

# 检查 dist 目录是否存在
if [ ! -d "dist" ]; then
    if [ "$FORCE_BUILD" = false ]; then
        log_error "dist 目录不存在，需要先构建前端项目"
        log_info "请运行: $0 $VERSION --force-build"
        exit 1
    fi
    log_info "dist 目录不存在，将进行构建"
fi

# 本地构建前端项目（仅在强制构建时）
if [ "$FORCE_BUILD" = true ]; then
    log_info "开始重新构建前端项目..."

    start_time=$(date +%s)

    # 检查是否安装了 pnpm
    if ! command -v pnpm &> /dev/null; then
        log_error "pnpm 未安装，请先安装 pnpm"
        echo "安装命令: npm install -g pnpm"
        exit 1
    fi

    # 安装依赖
    if [ ! -d "node_modules" ]; then
        log_info "安装前端依赖..."
        pnpm install --frozen-lockfile
    fi

    # 构建项目
    log_info "构建前端项目..."
    pnpm build

    end_time=$(date +%s)
    build_duration=$((end_time - start_time))

    log_success "前端项目构建完成，耗时: ${build_duration}s"
else
    log_info "跳过前端构建，使用现有 dist 目录"
    # 显示 dist 目录的修改时间
    if [ -d "dist" ]; then
        dist_time=$(stat -c %y "dist" 2>/dev/null || stat -f %Sm "dist" 2>/dev/null || echo "未知")
        log_info "当前 dist 目录修改时间: $dist_time"
    fi
fi

# 再次检查 dist 目录
if [ ! -d "dist" ]; then
    log_error "dist 目录不存在，无法继续"
    exit 1
fi

# 验证构建环境
log_info "验证构建环境..."
echo "当前目录: $(pwd)"
echo "dist目录状态:"
ls -la dist/ || { log_error "无法访问dist目录"; exit 1; }

# 确认nginx.conf存在
if [ -f "nginx.conf" ]; then
    log_info "nginx.conf 文件存在"
else
    log_error "nginx.conf 文件不存在！"
    exit 1
fi

# 检查dist目录内容
if [ -z "$(ls -A dist/)" ]; then
    log_error "dist目录为空，请先构建前端项目"
    exit 1
fi

log_info "dist目录验证通过，包含以下文件:"
find dist/ -type f | head -5

# 构建 Docker 镜像（使用临时目录方式）
log_info "开始构建前端 Docker 镜像 (使用 Dockerfile.simple)..."

# 创建临时构建目录
BUILD_DIR="docker-build-$(date +%s)"
mkdir -p "$BUILD_DIR"

# 复制必要文件到构建目录
log_info "准备构建文件..."
cp -r dist "$BUILD_DIR/"
cp nginx.conf "$BUILD_DIR/"
cp Dockerfile.simple "$BUILD_DIR/Dockerfile"

# 创建空的.dockerignore文件，确保不排除任何文件
echo "# 不排除任何文件" > "$BUILD_DIR/.dockerignore"

# 切换到构建目录
cd "$BUILD_DIR"

log_info "构建目录内容:"
ls -la

export DOCKER_BUILDKIT=1

start_time=$(date +%s)

# 构建Docker镜像
if ! docker build \
    --build-arg BUILDKIT_INLINE_CACHE=1 \
    --cache-from "$IMAGE_NAME:latest" \
    -t "$IMAGE_NAME:$VERSION" \
    -t "$IMAGE_NAME:latest" \
    .; then
    log_error "前端 Docker 镜像构建失败"

    # 输出调试信息
    log_info "调试信息:"
    echo "当前目录内容:"
    ls -la
    echo "Docker版本:"
    docker version

    # 清理临时目录
    cd ..
    rm -rf "$BUILD_DIR"
    exit 1
fi

end_time=$(date +%s)
build_duration=$((end_time - start_time))

log_success "前端 Docker 镜像构建完成，耗时: ${build_duration}s"

# 返回前端目录
cd ..

# 标记并推送镜像到阿里云容器镜像服务
log_info "标记镜像用于阿里云容器镜像服务..."
docker tag "$IMAGE_NAME:$VERSION" "$REGISTRY/$IMAGE_NAME:$VERSION"
docker tag "$IMAGE_NAME:latest" "$REGISTRY/$IMAGE_NAME:latest"

log_info "推送镜像到阿里云容器镜像服务..."
if docker push "$REGISTRY/$IMAGE_NAME:$VERSION"; then
    log_success "镜像推送成功: $REGISTRY/$IMAGE_NAME:$VERSION"
else
    log_error "镜像推送失败"
    # 清理临时目录
    rm -rf "$BUILD_DIR"
    exit 1
fi

# 推送latest标签
if docker push "$REGISTRY/$IMAGE_NAME:latest"; then
    log_success "latest标签推送成功"
else
    log_error "latest标签推送失败"
fi

# 清理临时目录
log_info "清理临时构建目录..."
rm -rf "$BUILD_DIR"

# 更新 Kubernetes 部署
log_info "更新 Kubernetes 部署..."
if kubectl set image deployment/buding-ai-web buding-ai-web="$REGISTRY/$IMAGE_NAME:$VERSION -n work"; then
    log_success "Kubernetes 部署更新成功"

    # 等待部署完成
    log_info "等待部署完成..."
    kubectl rollout status deployment/buding-ai-web --timeout=300s

    if [ $? -eq 0 ]; then
        log_success "部署已成功完成"
    else
        log_error "部署超时或失败"
        exit 1
    fi
else
    log_error "Kubernetes 部署更新失败"
    exit 1
fi

log_success "构建和部署流程全部完成！"
log_info "镜像版本: $VERSION"
log_info "镜像地址: $REGISTRY/$IMAGE_NAME:$VERSION"